LCR 007.三数之和
给定一个包含 n 个整数的数组 nums，判断 nums 中是否存在三个元素 a ，b ，c ，使得 a + b + c = 0 ？请找出所有和为 0 且 不重复 的三元组。

leetcode:https://leetcode.cn/problems/1fGaJU/description/



class Solution {  
public:  
    vector<vector<int>> threeSum(vector<int>& nums) {
        if(nums.size() < 3) return {};
        sort(nums.begin(), nums.end());  
        int n = nums.size();  
        vector<vector<int>> ans;  
        for(int i = 0; i < n; i++)  
        {  
            if(i>0 && nums[i] == nums[i-1]) continue; // 跳过重复元素  
            int left = i+1;  
            int right = n-1;  
            while(left < right)  
            {  
                while(left > (i+1) && nums[left] == nums[left-1] && left < right) left++; // 跳过重复元素  
                if(left >= right) break;
                int sum = nums[i] + nums[left] + nums[right];
                if(sum == 0)  
                {  
                    //ret.push_back({nums[i],nums[left],nums[right]});
                    ans.push_back({nums[i], nums[left], nums[right]});
                    //while(left < right && nums[left] == nums[left+1]) left++;
                    //while(left < right && nums[right] == nums[right-1]) right--;

                    left++;  
                    right--;  
                }  
                else if(sum > 0)  
                {  
                    right--;  
                }  
                else   
                {  
                    left++;  
                }  
            }  
        }  

        return ans;  
    }  
};